| Anterior | Próximo | Índice |
struct MinhaStrutura
{
int ano;
unsigned char mes;
unsigned char dia;
};
o dado ano começa no deslocamento zero em relação ao endereço inicial, o dado mes começa no deslocamento 2 e o dado dia começa no deslocamento 3:deslocamento
0000 ano - 2 bytes
0002 mes - 1 byte
0003 dia - 1 byte
Dentro do programa assembly, se nós queremos alterar uma estrutura, assim como qualquer outra variável, devemos em primeiro lugar obter o seu endereço. O parâmetro formal (aquele que foi declarado no protótipo do programa C), deve então ser defininido como um ponteiro, e o parâmetro efetivo (aquele que é passado para a rotina) é, na verdade, o endereço da variável ou estrutura (usando o operando de endereço "&"). Usa-se geralmente o registrador SI para receber o deslocamento inicial da estrutura, e nesse caso, o segmento "default" de dados será DS. No exemplo a seguir é passado o endereço de uma estrutura, e a rotina assembly inicializa a estrutura com determinados valores:
segment _TEXT class=CODE
GLOBAL _IniciaStruct
_IniciaStruct
push bp
mov bp,sp
push si
mov si,[bp+4] ;si = endereço da estrutura
mov word [si+0],2001 ;ano - si = primeiro campo: word
mov byte [si+2],10 ;mês - si + 2 = segundo campo: byte
mov byte [si+3],22 ;dia - si + 3 = terceiro campo: byte
pop si
pop bp
ret
|
| Anterior | Próximo | Índice |